﻿using System;
using System.Threading;

namespace MutexDemo
{
    class Program
    {
        // 全局唯一的互斥量名称  
        private static readonly string mutexName = "Global\\MyMutex";

        private static Mutex mutex;

        static void Main(string[] args)
        {
            // 创建 Mutex 实例  
            mutex = new Mutex(true, mutexName, out bool createdNew);

            Console.WriteLine("主线程开始运行。");

            // 启动一个新线程来演示互斥量的使用  
            Thread newThread = new Thread(DoWork);
            newThread.Start();

            // 等待新线程完成工作  
            newThread.Join();

            // 释放 Mutex，允许其他进程或线程使用它（如果它是全局的）  
            mutex.ReleaseMutex();

            Console.WriteLine("主线程退出。");
        }

        private static void DoWork()
        {
            // 等待互斥量可用（即主线程持有它）  
            mutex.WaitOne();
            try
            {
                Console.WriteLine($"工作线程开始工作。");
                
                // 在这里添加要同步的代码...  
                Thread.Sleep(3000); // 模拟工作耗时  
                Console.WriteLine($"工作线程完成工作。");
            }
            finally
            {
                // 释放 Mutex，允许其他等待的线程或进程获取它  
                mutex.ReleaseMutex();
            }
        }
    }
}
